# @file         driver Makefile
# @brief        驱动 Makefile。
# @details      none
# @author       lzm
# @date         2021-03-21 10:23:03
# @version      v1.0
# @copyright    Copyright By lizhuming, All Rights Reserve# 
# ******************************************************
# @LOG 修改日志:
# ******************************************************

# 编译后内核路径
KERNEL_DIR = /home/lss/work/kernel/imx6/ebf-buster-linux/build_image/build
# 定义框架
# ARCH 为 x86 时，编译链头为 
# ARCH 为 arm 时，编译链头为 arm-linux-gnueabihf-
ARCH = arm
ifeq ($(ARCH),x86)
CROSS_COMPILE = # 交叉编译工具头,如：
else
CROSS_COMPILE = arm-linux-gnueabihf-# 交叉编译工具头,如：arm-linux-gnueabihf-
endif
CC      = $(CROSS_COMPILE)gcc # 编译器，对 C 源文件进行编译处理，生成汇编文件

# 共享到sub-Makefile
export  ARCH  CROSS_COMPILE

# 路径
PWD := $(shell pwd)
# 当前模块路径
# $(src) 是内和文件定义并传过来的当前模块 M= 的路径。
MODDIR := $(src)


# 注意:驱动目标不要和文件名相同
TARGET_DRV := xxx_bus_device_driver
TARGET_APP := xxx_app

# 本次整个编译需要源 文件 和 目录
# 这里的“obj-m” 表示该模块不会编译到zImage ，但会生成一个独立的xxx.ko 静态编译（由内核源码顶层Makefile识别）
# 模块的多文件编译：obj-m 是告诉 makefile 最总的编译目标。而 $(TARGET)-y 则是告诉 makefile 该总目标依赖哪些目标文件。(也可以使用 xxx-objs)
obj-m := ./bus/lzm_bus.o
obj-m += ./device/xxx_device.o
obj-m += ./driver/xxx_driver.o
# obj-m += $(patsubst %.c,%.o,$(shell ls *.c))

# 编译条件处理
# 指定头文件 由于该文件是 -C 后再被调用的，所以部分参数不能使用 $(shell pwd)
# $(src) 是内和文件定义并传过来的当前模块 M= 的路径。
#ccflags-y := -I$(MODDIR)/include
#ccflags-y += -I$(MODDIR)/device
#ccflags-y += -I$(MODDIR)/driver


# 第一个目标 CURDIR 是该makefile内嵌变量，自动设置为当前目录
all :
	@$(MAKE) -C $(KERNEL_DIR) M=$(CURDIR)  modules
#	make mobailes 就是是编译模块，上面是其添加参数的指令
#	$(CROSS_COMPILE)gcc -o $(TARGET_APP) $(TARGET_APP).c

    
# 清理
.PHONY:clean
clean:
	$(MAKE)  -C $(KERNEL_DIR) M=$(CURDIR) clean
#	rm $(TARGET_APP)


